package com.unytech.project.service.base;

import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;

import com.unytech.project.utils.PagingData;

/**
 * DAO数据库访问接口
 * 提供各种数据库操作的抽象方法
 */
public interface DAO<T> {
	/**
	 * 获取记录总数
	 * @param entityClass 实体类
	 * @return
	 * @throws Exception 
	 */
	public long getCount() throws Exception;
	public long getCountbyWhere();
	
	/**
	 * 清除一级缓存的数据
	 */
	public void clear();
	/**
	 * 保存实体
	 * @param entity 实体id
	 */
	public void save(T entity);
	public void saveAll(List<T> entitys);
	/**
	 * 更新实体
	 * @param entity 实体id
	 */
	public void update(T entity);
	/**
	 * 删除实体
	 * @param entityClass 实体类
	 * @param entityids 实体id数组
	 */
	public void deleteAll(Serializable ... entityids);
	public void deleteAll();
	/**
	 * 获取实体
	 * @param <T>
	 * @param entityClass 实体类
	 * @param entityId 实体id
	 * @return
	 */
	public T find(Serializable entityId);
	public List<T> findAll() throws Exception;
	
	public PagingData<T> findbySQL(String sql);
	
	/**
	 * 获取分页数据
	 * @param pagingdata 分页类
	 * @param wherejpql 条件字段
	 * @param queryParams 条件参数
	 * @param orderby 排序字段及规则
	 * @return
	 */
	public PagingData<T> findPagingData(PagingData<T> pagingdata);
	
	public PagingData<T> findPagingData(PagingData<T> pagingdata, LinkedHashMap<String, String> orderby);
	
	public PagingData<T> findPagingData(PagingData<T> pagingdata, String wherejpql, Object[] queryParams);
	
	public PagingData<T> findPagingData(PagingData<T> pagingdata, String wherejpql, Object[] queryParams, LinkedHashMap<String, String> orderby);
	
}